#include<iostream>
#include<string>
#include<map>
using namespace std;
//遍历模板类
template<class T>
class Container
{
public:
void print(T& t)
{
    auto it = t.begin();
    for (; it != end();it++)
    {
        cout << it->first << "," << it->second << endl;
    }
}
};
//为了一劳永逸，将后面会发生变化的类型变为T类型
//使用是把需要的类型传递给T就行泛性编程
//用typedef 给一个模板定义别名
template <class T>
//typedef map<int,  T> maptype;不能通过typedef给模板定义别名
//如果非要用typedef定义别名，那么可以通国创建一个结构体
struct MyMap
{
    //通过定义类模板
    //外敷类
    typedef map<int, T> maptype;
};
//通过using给模板定义别名
template <class T>
using MMap = map<int, T>;

void func()
{
    MMap<string> mm2;
    mm2.insert(make_pair(1,"hello"));
    Container<MMap<string>> cc;
    cc.print(mm2);

    MyMap<int>::maptype mm1;
    MyMap<double>::maptype mm2;
    MyMap<string>::maptype mm3;
    //赋值操作和其他容器赋值操作一致
    mm1.insert(make_pair(1, 2));//用insert给键值对赋值
    Container<MyMap<int>::maptype> c;
    c.print(mm1);
}
int main()
{
    //定义不同存储内容的键值对 
    //map: int-int int-double int -string
    //可以使用泛性编程来简化编程的过程

    map<int ,string>m1;
    map<int ,int>m2;
    map<int, double> m3;
   

    return 0;
}